const crypto = require("crypto");

class signAlgo{
    /**
     * 拼接数据
     * @param {*} param 
     * @returns 
     */
    sortParm(param) {
        return Object.keys(param)
            .filter(key => key != "sign" && param[key] != null && param[key] != '' && param[key] != undefined)
            .sort()
            .map((key) => `${key}=${param[key]}`)
            .join("&");
    }

    /**
     * 签名
     * @param {*} data 
     * @param {*} secret 
     */
    sign(data,secret){
        let str = this.sortParm(data);
        str += "&key="+secret;
        return crypto.createHash('md5').update(str).digest('hex');
    }

    /**
     * 验签
     */
    verify(data,secret){
        if(this.sign(data,secret) !== data.sign){
            return false;
        }
        return true;
    }
}

module.exports = new signAlgo();